home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Aminet 8
/
Aminet 8 (1995)(GTI - Schatztruhe)[!][Oct 1995].iso
/
Aminet
/
util
/
arc
/
GNUTar10_2.lha
/
GnuTAR
/
GNUTarSource.LHA
/
source
/
sas_amiga.c
< prev
next >
Wrap
C/C++ Source or Header
|
1995-07-23
|
3KB
|
159 lines
/*
* Amiga specific functions
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/dir.h>
#include <sys/stat.h>
#include <time.h>
/* maxmium pathlength for AmigaDOS */
#define MAXPATHLEN (255) /* BSTR */
/* definitions for our chmod() replacement, which should
the correct flags out of "(h)sparwed"
*/
#define H_BIT (7) /* Hidden */
#define S_BIT (6) /* Script */
#define P_BIT (5) /* Pure */
#define A_BIT (4) /* Archive */
#define R_BIT (3) /* Read */
#define W_BIT (2) /* Write */
#define E_BIT (1) /* Execute */
#define D_BIT (0) /* Delete */
/* Flags themselves */
#define H_VAL (1<<H_BIT) /* 128 = 2^7 */
#define S_VAL (1<<S_BIT) /* 64 = 2^6 */
#define P_VAL (1<<P_BIT) /* 32 = 2^5 */
#define A_VAL (1<<A_BIT) /* 16 = 2^4 */
#define R_VAL (1<<R_BIT) /* 8 = 2^3 */
#define W_VAL (1<<W_BIT) /* 4 = 2^2 */
#define E_VAL (1<<E_BIT) /* 2 = 2^1 */
#define D_VAL (1<<D_BIT) /* 1 = 2^0 */
/* Masks for High-Active, only specific bit not set (same as for low) */
#define H_SET (~(H_VAL))
#define S_SET (~(S_VAL))
#define P_SET (~(P_VAL))
#define A_SET (~(A_VAL))
/* Masks for Low-Active, only specific bit not set (same as for high) */
#define R_SET (~(R_VAL))
#define W_SET (~(W_VAL))
#define E_SET (~(E_VAL))
#define D_SET (~(D_VAL))
int sas_chmod(char *filename, int modes)
{
unsigned long mask = R_VAL | W_VAL | D_VAL | E_VAL; /* clear; low-active */
/* since the unix tar archives usually don't seem to have to correct
S_I flags set, we now do just override our own chmod()
replacement via always using standard "rwed" settings.
Until someone finds a better solution
*/
modes = S_IREAD | S_IWRITE | S_IEXECUTE | S_IDELETE;
/* if(modes & S_IHIDDEN) mask = mask|H_VAL; */
if(modes & S_ISCRIPT) mask = mask|S_VAL;
if(modes & S_IPURE) mask = mask|P_VAL;
if(modes & S_IARCHIVE) mask = mask|A_VAL;
if(modes & S_IREAD) mask = mask&R_SET;
if(modes & S_IWRITE) mask = mask&W_SET;
if(modes & S_IEXECUTE) mask = mask&E_SET;
if(modes & S_IDELETE) mask = mask&D_SET;
/* result = */ SetProtection(filename, mask);
return(0); /* should have worked */
}
char *getwd(char *buf)
{
return(getcwd(buf, MAXPATHLEN));
}
int readlink(char *path, char *name, int max)
{
return(-1);
}
int symlink(void)
{
return(-1);
}
int utime(void)
{
return(0);
}
int umask(void)
{
return(0);
}
int fork(void)
{
return(-1);
}
int execlp(void)
{
return(-1);
}
int findgid(void)
{
return(0);
}
int finduid(void)
{
return(0);
}
int pipe(void)
{
return(-1);
}
int dup(void)
{
return(-1);
}
int ftruncate(void)
{
return(-1);
}
int setmode(void)
{
return(0);
}